package santeclair.referentiel.optique.tarification.webservice;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;

import santeclair.referentiel.optique.tarification.bean.detailTarif.DetailTarif;
import santeclair.referentiel.optique.tarification.bean.detailTarif.StatutTarif;
import santeclair.referentiel.optique.tarification.bean.detailTarif.Tarif;
import santeclair.referentiel.optique.tarification.dto.detailTarif.DetailTarifDto;
import santeclair.referentiel.optique.tarification.dto.detailTarif.StatutTarifDto;
import santeclair.referentiel.optique.tarification.dto.detailTarif.TarifDto;

public abstract class DetailTarifWrapper {

    public static DetailTarifDto getDetailTarifDtoFromDetailTarif(DetailTarif detailTarif) {

        DetailTarifDto detailTarifDto = new DetailTarifDto();
        if (detailTarif != null) {
            detailTarifDto.setDomTom(detailTarif.isDomTom());
            detailTarifDto.setStatutDetailTarifDto(StatutTarifDto.valueOf(detailTarif.getStatutTarif().name()));
            detailTarifDto.setTarifMateriau(getTarifDtoFromTarif(detailTarif.getTarifMateriau()));
            detailTarifDto.setTarifSupplementCylindre(getTarifDtoFromTarif(detailTarif.getTarifSupplementCylindre()));
            detailTarifDto.setTarifSurface(getTarifDtoFromTarif(detailTarif.getTarifSurface()));
            List<Tarif> tarifTraitements = detailTarif.getTarifTraitements();
            if (!CollectionUtils.isEmpty(tarifTraitements)) {
                List<TarifDto> tarifTraitementDtos = new ArrayList<>(tarifTraitements.size());
                for (Tarif tarif : tarifTraitements) {
                    tarifTraitementDtos.add(getTarifDtoFromTarif(tarif));
                }
                detailTarifDto.setTarifTraitements(tarifTraitementDtos);
            }
            detailTarifDto.setMessage(detailTarif.getMessage());
        }
        return detailTarifDto;
    }

    private static TarifDto getTarifDtoFromTarif(Tarif tarif) {
        TarifDto tarifDto = new TarifDto();
        if (tarif != null) {
            tarifDto.setCode(tarif.getCode());
            tarifDto.setMessage(tarif.getMessage());
            StatutTarif statutTarif = tarif.getStatutTarif();
            if (statutTarif != null) {
                tarifDto.setStatutTarif(StatutTarifDto.valueOf(tarif.getStatutTarif().name()));
            }
            tarifDto.setTarif(tarif.getTarif());
        }
        return tarifDto;
    }

}
